cssfiltervalue: Implement drop-shadows
authorMatthias Clasen <mclasen@redhat.com>
Sat, 6 Feb 2021 02:37:14 +0000 (21:37 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 6 Feb 2021 21:16:43 +0000 (16:16 -0500)
We have all the pieces, so this is surprisingly easy.

docs/reference/gtk/css-properties.md
gtk/gtkcssfiltervalue.c

index 809669dd90a0f699debe1ec6e3a062fe33a9bfb7..8fa9819fc7e56ba4320ebeedd5a3ff64a2d74b9b 100644 (file)
@@ -129,7 +129,7 @@ done with
 |:-----------|:----------|:------|
 |color       | [CSS Color Level 3](https://www.w3.org/TR/css3-color/#foreground) | |
 |opacity     | [CSS Color Level 3](https://www.w3.org/TR/css3-color/#opacity) | |
-|filter      | [CSS Filter Effect Level 1](https://drafts.fxtf.org/filters/#FilterProperty) | CSS allows drop-shadow |
+|filter      | [CSS Filter Effect Level 1](https://drafts.fxtf.org/filters/#FilterProperty) | |
 |font-family | [CSS Fonts Level 3](https://www.w3.org/TR/css3-fonts/#font-family-prop) | defaults to gtk-font-name setting |
 |font-size   | [CSS Fonts Level 3](https://www.w3.org/TR/css3-fonts/#font-size-prop) | defaults to gtk-font-name setting |
 |font-style  | [CSS Fonts Level 3](https://www.w3.org/TR/css3-fonts/#font-style-prop) | |
index b1d1359f522e57255a6c3f0a6865e924b8de9d72..ecc225a9258f1782685d5d22633ae293611ae56a 100644 (file)
@@ -677,7 +677,7 @@ gtk_css_filter_print (const GtkCssFilter *filter,
       break;
 
     case GTK_CSS_FILTER_DROP_SHADOW:
-      g_string_append (string, "drop_shadow(");
+      g_string_append (string, "drop-shadow(");
       _gtk_css_value_print (filter->drop_shadow.value, string);
       g_string_append (string, ")");
       break;
@@ -797,7 +797,7 @@ gtk_css_filter_parse_shadow (GtkCssParser *parser,
 {
   GtkCssValue **values = data;
 
-  values[n] = _gtk_css_shadow_value_parse_filter (parser);
+  values[n] = gtk_css_shadow_value_parse_filter (parser);
   if (values[n] == NULL)
     return 0;
 
@@ -960,8 +960,7 @@ gtk_css_filter_value_push_snapshot (const GtkCssValue *filter,
             }
           else if (filter->filters[j].type == GTK_CSS_FILTER_DROP_SHADOW)
             {
-              if (!gtk_css_shadow_value_push_snapshot (filter->filters[j].drop_shadow.value, snapshot))
-                gtk_snapshot_push_debug (snapshot, "Shadow Filter omitted");
+              gtk_css_shadow_value_push_snapshot (filter->filters[j].drop_shadow.value, snapshot);
             }
           else
             g_warning ("Don't know how to handle filter type %d", filter->filters[j].type);
@@ -993,8 +992,10 @@ gtk_css_filter_value_pop_snapshot (const GtkCssValue *filter,
       if (i < j)
         gtk_snapshot_pop (snapshot);
 
-      if (j < filter->n_filters)
+      if (filter->filters[j].type == GTK_CSS_FILTER_BLUR)
         gtk_snapshot_pop (snapshot);
+      else if (filter->filters[j].type == GTK_CSS_FILTER_DROP_SHADOW)
+        gtk_css_shadow_value_pop_snapshot (filter->filters[j].drop_shadow.value, snapshot);
 
       i = j + 1;
     }